package com.hj.redis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author : hujing
 * @Date: 2025/8/5 8:53
 * @Description: redis的CRUD操作
 */
public class RedisCRUDDemo {
    
    private static final String HOST = "192.168.100.236";
    private static final int PORT = 6379;
    private static JedisPool jedisPool;
    
    // 初始化连接池
    static{
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(10);//最大连接数
        poolConfig.setMaxIdle(5);//最大空闲连接数
        poolConfig.setMinIdle(1);//最小空闲连接数
        
        // 创建连接池
        jedisPool = new JedisPool(poolConfig,HOST,PORT);
    }
    
    // 获取Jedis连接
    public static Jedis getJedis(){
        return jedisPool.getResource();
    }

    public static void main(String[] args) {
        try(Jedis jedis = getJedis()){
            jedis.select(8);//切换到8号数据库
            System.out.println("连接redis成功");
            System.out.println("服务器信息: "+jedis.info());
            
            // 字符串(String)操作
            stringOperations(jedis);
            
            // 哈希(Hash)操作
            hashOperations(jedis);

            // 列表(List)操作
            listOperations(jedis);

            // 集合（Set）操作
            setOperations(jedis);

            // 有序集合（Sorted Set）操作
            sortedSetOperations(jedis);
        }
    }

    private static void sortedSetOperations(Jedis jedis) {
        System.out.println("集合（Set）操作");
        
        String key = "user:1001:tags";
        
        // 创建/添加元素
        jedis.sadd(key,"java","python","redis","java");//重复的元素不会添加
        System.out.println("添加集合元素:"+jedis.smembers(key));
        
        // 读取
        System.out.println("获取集合："+jedis.smembers(key));
        
        // 检查元素是否存在
        System.out.println("是否存在java元素:"+jedis.sismember(key,"java"));
        
        // 删除
//        jedis.srem(key,"python");
//        System.out.println("删除python元素后："+jedis.smembers(key));
        
        // 删除整个集合
//        jedis.del(key);
    }

    private static void setOperations(Jedis jedis) {
        System.out.println("有序集合（Sorted Set）操作");
        
        String key ="leaderboard";
        
        // 添加元素
        jedis.zadd(key,100,"Alice");
        jedis.zadd(key,200,"Bob");
        jedis.zadd(key,300,"Charlie");
        System.out.println("添加有序集合元素:"+jedis.zrangeWithScores(key,0,-1));
        
        // 读取
        System.out.println("获取有序集合（升序）："+jedis.zrangeWithScores(key,0,-1));
        System.out.println("获取有序集合（降序）："+jedis.zrevrangeWithScores(key,0,-1));
        
        // 更新
        jedis.zadd(key,250,"Bob");
        System.out.println("Bob分数更新后："+jedis.zrangeWithScores(key,0,-1));
        
        // 删除
//        jedis.zrem(key,"Charlie");
//        System.out.println("删除Charlie元素后："+jedis.zrangeWithScores(key,0,-1));
        
        // 删除整个有序集合
//        jedis.del(key);
    }

    private static void listOperations(Jedis jedis) {
        System.out.println("列表操作");
        
        String key ="user:1001:posts";
        
        // 创建/添加元素
        jedis.lpush(key,"post1","post2","post3");
        System.out.println("添加列表元素:"+jedis.lrange(key,0,-1));
        
        // 读取
        List<String> posts = jedis.lrange(key, 0, -1);
        System.out.println("获取列表元素:"+posts);
        
        // 更新
        jedis.lset(key,0,"newPost1");
        System.out.println("更新第一个元素："+jedis.lrange(key,0,-1));
        
        // 删除
//        jedis.lpop(key);
//        System.out.println("删除第一个元素后："+jedis.lrange(key,0,-1));
        
        // 删除整个列表
//        jedis.del(key);
    }

    private static void hashOperations(Jedis jedis) {
        System.out.println("哈希操作");
        
        String key = "user:1002";
        
        // 创建/更新
        Map<String,String> userMap = new HashMap<>();
        userMap.put("name","李四");
        userMap.put("age","30");
        userMap.put("email","lisi@163.com");
        jedis.hset(key,userMap);
        System.out.println("创建哈希: "+key);
        
        // 读取
        Map<String, String> retrievedUser = jedis.hgetAll(key);
        System.out.println("获取哈希："+retrievedUser);
        
        // 更新单个字段
        jedis.hset(key,"age","31");
        System.out.println("更新年龄："+key+"->age:31");
        
        // 删除
//        jedis.hdel(key,"email");
//        System.out.println("删除email字段后："+jedis.hgetAll(key));
        
        // 删除整个哈希
//        jedis.del(key);
    }

    private static void stringOperations(Jedis jedis) {
        System.out.println("字符串操作");
        
        String key = "user:1001:name";
        
        // 创建/更新
        jedis.set(key,"张三");
        System.out.println("设置键值："+key+"->"+"张三");
        
        // 读取
        String value = jedis.get(key);
        System.out.println("获取键值："+key+"->"+value);
        
        // 删除
//        jedis.del(key);
//        System.out.println("删除键值："+key);
//        System.out.println("键是否存在:"+jedis.exists(key));
    }
}
